/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.javahispano.javacup.tacticas_aceptadas.dconrado;

import org.javahispano.javacup.modelo.*;

import java.util.List;
import java.util.Random;

public class Grid {

	/** Division del campo */
	public static final int GRIDX = 4;
	public static final int GRIDY = 3;

	private GridPosition[][] gridPosition = new GridPosition[GRIDX][GRIDY];

	int indexX = 0;
	int indexY = 0;

	/**
	 * Constructor.
	 */
	public Grid() {
		for (int i = 0; i < GRIDX; i++) {
			double y1 = (Constantes.LARGO_CAMPO_JUEGO / GRIDX) * i;
			for (int j = 0; j < GRIDY; j++) {
				
				double x1 = (Constantes.ANCHO_CAMPO_JUEGO / GRIDY) * j;
				// ahora creo un objeto para cada elemento
				double y2 = (Constantes.LARGO_CAMPO_JUEGO / GRIDX)
						* (i + 1);
				double x2 = (Constantes.ANCHO_CAMPO_JUEGO / GRIDY)
						* (j + 1);
				
				if ((Grid.GRIDY * i) + j == 1) {
					gridPosition[i][j] = new GridPosition(0
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), 0
							- (Constantes.LARGO_CAMPO_JUEGO / 2), 0,0);
				} else if ((Grid.GRIDY * i) + j == 2) {
					gridPosition[i][j] = new GridPosition(0, 0
							- (Constantes.LARGO_CAMPO_JUEGO / 2), 0
							+ (Constantes.ANCHO_CAMPO_JUEGO / 2), 0);
					
					//System.exit(-1);
				} else if ((Grid.GRIDY * i) + j == 9) {
					gridPosition[i][j] = new GridPosition(0
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), 0
							+ (Constantes.LARGO_CAMPO_JUEGO / 4), 0, 0
							+ (Constantes.LARGO_CAMPO_JUEGO /2));
				} else if ((Grid.GRIDY * i) + j == 10) {
					gridPosition[i][j] = new GridPosition(0, 0
							+ (Constantes.LARGO_CAMPO_JUEGO / 4),
							0+ (Constantes.ANCHO_CAMPO_JUEGO /2),
							0+ (Constantes.LARGO_CAMPO_JUEGO/2));
				} else {
					
					// gridPosition[i][j]=new GridPosition(x1,y1,x2,y2);
					gridPosition[i][j] = new GridPosition(x1
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), y1
							- (Constantes.LARGO_CAMPO_JUEGO / 2), x2
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), y2
							- (Constantes.LARGO_CAMPO_JUEGO / 2));
					// System.out.println("i:"+i+":x1:"+(x1-(Constantes.
					// LARGO_CAMPO_JUEGO
					// /2))+":y1:"+(y1-(Constantes.ANCHO_CAMPO_JUEGO
					// /2))+":x2:"+(
					// x2-(Constantes.LARGO_CAMPO_JUEGO/2))+":y2:"+(
					// y2-(Constantes.ANCHO_CAMPO_JUEGO/2)));
				}
			}
		}
		// System.exit(-1);
	}
	
	public Grid(Posicion p) {
		for (int i = 0; i < GRIDX; i++) {
			double y1 = (Constantes.LARGO_CAMPO_JUEGO / GRIDX) * i;
			for (int j = 0; j < GRIDY; j++) {
				
				
				
				double x1 = (Constantes.ANCHO_CAMPO_JUEGO / GRIDY) * j;
				// ahora creo un objeto para cada elemento
				double y2 = (Constantes.LARGO_CAMPO_JUEGO / GRIDX)
						* (i + 1);
				double x2 = (Constantes.ANCHO_CAMPO_JUEGO / GRIDY)
						* (j + 1);
				
				if ((Grid.GRIDY * i) + j == 0) {
					gridPosition[i][j] = new GridPosition(0,0,0,0);
				}
				
				
				
				if ((Grid.GRIDY * i) + j == 1) {
					gridPosition[i][j] = new GridPosition(0
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), 0
							- (Constantes.LARGO_CAMPO_JUEGO / 2), 0+9, -5);
				} else if ((Grid.GRIDY * i) + j == 2) {
					gridPosition[i][j] = new GridPosition(1, 0
							- (Constantes.LARGO_CAMPO_JUEGO / 2), 0
							+ (Constantes.ANCHO_CAMPO_JUEGO / 2), -5 );
					
					//System.exit(-1);
				} else if ((Grid.GRIDY * i) + j == 9) {
					int defensa = 0;
					int ancho = 0;
					if (p.getY()<0){
						defensa = 30;
						ancho = 20;
					}
					gridPosition[i][j] = new GridPosition(0
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), 0
							+ (Constantes.LARGO_CAMPO_JUEGO / 4)-defensa, 0, 0
							+ (Constantes.LARGO_CAMPO_JUEGO /2)+ancho-defensa);
				} else if ((Grid.GRIDY * i) + j == 10) {
					int defensa = 0;
					int ancho = 0;
					if (p.getY()<0){
						defensa =30;
						ancho = 20;
					}
					gridPosition[i][j] = new GridPosition(0-ancho, 0
							+ (Constantes.LARGO_CAMPO_JUEGO / 4-defensa),
							0+ (Constantes.ANCHO_CAMPO_JUEGO /2),
							0+ (Constantes.LARGO_CAMPO_JUEGO/2)-defensa);
				} else {
					
					
					int defensas = 0;
					if ((Grid.GRIDY * i) + j>2 && ((Grid.GRIDY * i) + j<10)){
						defensas = 10;
					
					if (p.getY()>20){
						gridPosition[i][j] = new GridPosition(x1
								- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y1
								- (Constantes.LARGO_CAMPO_JUEGO / 2))+defensas, x2
								- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y2
								- (Constantes.LARGO_CAMPO_JUEGO / 2))+defensas);
					}else if (p.getY()<-20){
								gridPosition[i][j] = new GridPosition(x1
								- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y1
								- (Constantes.LARGO_CAMPO_JUEGO / 2))-defensas, x2
								- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y2
								- (Constantes.LARGO_CAMPO_JUEGO / 2))-defensas);	
					
					}else //if (p.getY()<(Constantes.LARGO_CAMPO_JUEGO / 2)&&(p.getY()>0)){
						
					{		
						gridPosition[i][j] = new GridPosition(x1
									- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y1
									- (Constantes.LARGO_CAMPO_JUEGO / 2)), x2
									- (Constantes.ANCHO_CAMPO_JUEGO / 2), (y2
									- (Constantes.LARGO_CAMPO_JUEGO / 2)));
							
					
					}}/*}else{
					// gridPosition[i][j]=new GridPosition(x1,y1,x2,y2);
					gridPosition[i][j] = new GridPosition(x1
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), y1
							- (Constantes.LARGO_CAMPO_JUEGO / 2)-10, x2
							- (Constantes.ANCHO_CAMPO_JUEGO / 2), y2
							- (Constantes.LARGO_CAMPO_JUEGO / 2)-10);
					// System.out.println("i:"+i+":x1:"+(x1-(Constantes.
					// LARGO_CAMPO_JUEGO
					// /2))+":y1:"+(y1-(Constantes.ANCHO_CAMPO_JUEGO
					// /2))+":x2:"+(
					// x2-(Constantes.LARGO_CAMPO_JUEGO/2))+":y2:"+(
					// y2-(Constantes.ANCHO_CAMPO_JUEGO/2)));
					}*/
					
					/*if(((Grid.GRIDY * i) + j)!=0)  {
					System.out.println("(Grid.GRIDY * i) + j )"+((Grid.GRIDY * i) + j));
					System.out.println("getY"+p.getY());
					System.out.println("X1"+gridPosition[i][j].getX1()+"Y1"+gridPosition[i][j].getY1()+
							"X2"+gridPosition[i][j].getX2()+"Y2"+gridPosition[i][j].getY2());
					System.exit(-1);}*/
				}
			}
		}
	}

	public GridPosition[][] getGridPosition() {
		return gridPosition;
	}

	public GridPosition getGridPosition(int i, int j) {
		return gridPosition[i][j];
	}

	public void setGridPosition(GridPosition[][] gridPosition) {
		this.gridPosition = gridPosition;
	}

	public int[] position(SituacionPartido sp) {

		int[] tmp = new int[11];
		int index=0;
		Posicion balon = sp.balon();
		for (int i = 0; i < 11; i++) {
			tmp[i]=-1;
		}
		
		for (int i = 0; i < GRIDX; i++) {
			for (int j = 0; j < GRIDY; j++) {
				
				// if(gridPosition[i][j].)
				GridPosition gp = gridPosition[i][j];
				//System.out.println("balon x:"+balon.getX()+":y:"+balon.getY()+
				// ":X1:"
				// +gp.getX1()+":Y1:"+gp.getY1()+":X2:"+gp.getX2()+":Y2:"+gp
				// .getY2());
				if(((Grid.GRIDY * i) + j)!=11 &&(((Grid.GRIDY * i) + j)!=0)){
				if ((gp.getX1() <= balon.getX())
						&& (gp.getX2() >= balon.getX())
						&& ((gp.getY1() <= balon.getY()) && (gp.getY2() >= balon
								.getY()))){
					
					tmp[index] = ((Grid.GRIDY * i) + j);
				    index++;	
				}}
			}
		}
		return tmp;
	}

	public GridPosition opponent(SituacionPartido sp) {
		GridPosition tmp = null;

		return tmp;
	}
}